package com.symc.his.api.patient;

import com.symc.his.api.base.BaseResponse;
import com.symc.his.api.patient.dto.req.PatientInfoReqDTO;
import com.symc.his.api.patient.dto.resp.PatientInfoRespDTO;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * @Description: 病人档案管理服务接口
 * @CreateTime: 2023/3/5 8:00
 * @Version:
 * @Since: 1.8
 * @Author: 辛凤文 forward.seen@foxmail.com
 */
public interface PatientService {

    /**
     * 病人档案管理服务接口测试
     *
     * @return
     */
    @GetMapping("/testPatientService")
    String testPatientService();

    /**
     * 全局异常拦截测试
     *
     * @return
     */
    @GetMapping("/testException")
    BaseResponse<String> testException();

    /**
     * 测试带参数接口
     *
     * @param a
     * @return
     */
    @GetMapping("/testParam")
    BaseResponse<String> testParam(@RequestParam Integer a);

    /**
     * DTO数据传输测试接口
     *
     * @param patientInfoReqDTO
     * @return
     */
    @PostMapping("/updatePatientInfoDTO")
    BaseResponse<PatientInfoRespDTO> updatePatientInfoDTO(@RequestBody PatientInfoReqDTO patientInfoReqDTO);

    /**
     * RPC测试接口
     *
     * @param a
     * @return
     */
    @GetMapping("/feignWeChat")
    BaseResponse<String> feignWeChat(@RequestParam("a") Integer a);

    /**
     * 获取病人列表
     *
     * @return
     */
    @GetMapping("/getPatientInfoList")
    BaseResponse<PatientInfoRespDTO> getPatientInfoList();

    /**
     * 获取病人信息
     * @param patientId
     * @return
     */
    @GetMapping("/getPatientInfoByPatientId")
    BaseResponse<PatientInfoRespDTO> getPatientInfoByPatientId(@RequestParam String patientId);

    /**
     * 分页获取病人列表
     *
     * @param currentPageNum
     * @param pageSize
     * @return
     */
    @GetMapping("/getPatientInfoPage")
    BaseResponse<PatientInfoRespDTO> getPatientInfoPage(@RequestParam Integer currentPageNum,
        @RequestParam Integer pageSize);

    /**
     * 根据条件查询符合要求的病人档案信息记录
     *
     * @param patientInfoReqDTO
     * @return
     */
    @PostMapping("/queryPatientInfoList")
    BaseResponse<PatientInfoRespDTO> queryPatientInfoList(@RequestBody PatientInfoReqDTO patientInfoReqDTO);

    /**
     * 根据条件分页查询符合要求的病人档案信息记录
     * @param currentPageNum
     * @param pageSize
     * @param patientInfoReqDTO
     * @return
     */
    @PostMapping("/queryPatientInfoPage")
    BaseResponse<PatientInfoRespDTO> queryPatientInfoPage(@RequestParam Integer currentPageNum,
        @RequestParam Integer pageSize, @RequestBody PatientInfoReqDTO patientInfoReqDTO);

    /**
     * 新增一条病人档案信息
     * @param patientInfoReqDTO
     * @return
     */
    @PostMapping("/addPatient")
    BaseResponse<PatientInfoRespDTO> addPatient(@RequestBody PatientInfoReqDTO patientInfoReqDTO);

    /**
     * 根据身份证号查询某个病人的信息
     * @param identifyNo
     * @return
     */
    @GetMapping("/queryPatientInfoByIdentifyNo")
    BaseResponse<PatientInfoRespDTO> queryPatientInfoByIdentifyNo(
        @RequestParam String identifyNo);

}